package com.example.demo.dto.submit;

import com.example.demo.valid.PhoneValid;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.PastOrPresent;
import java.time.LocalDate;

/**
 * 创建通讯录
 *
 * @author wzw
 * @date 2022/4/28 10:32
 */
@Data
// todo 2022-05-08 23:43:39 类命名不符合实际用途，Query表示查询
public class CreateAddressBookSubmit {

    /**
     * name 姓名
     */
    @NotBlank(message = "用户名不可为空")
    @Length(max = 20, message = "名字不能超过20个字")
    private String name;

    /**
     * phone 电话
     */

    @NotBlank(message = "电话不可为空")
    // todo 2022-05-08 23:44:12 用正则校验手机号非常好，可把此项提取为校验类（类似DateValid），其他模块可直接调用，若规则发生修改，在校验类中完成即可。编码原则之一：高内聚，低耦合。
    @PhoneValid
    private String phone;

    /**
     * birthday 生日
     */
    @NotNull(message = "出生日期不可为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    // todo 2022-05-08 23:46:15 官方本身有此校验类，不要重复造轮子
    @PastOrPresent(message = "不能出生在未来")
    private LocalDate birthday;

    /**
     * remark 备注
     */
    @Length(max = 200, message = "备注不能超过200个字")
    private String remark;

    // todo 2022-05-08 23:46:53 createTime、modifiedTime为系统自动生成，为何要把属性放到接口参数接收类中？


}
